package com.example.designpattern.behavioral.template_method;

/**
 * 在使用模板方法模式时，我们可以为不同的模板方法设置不同的控制权限：
 *
 * 如果不希望子类覆写模板中的某个方法，使用 final 修饰此方法；
 * 如果要求子类必须覆写模板中的某个方法，使用 abstract 修饰此方法；
 * 如果没有特殊要求，可使用 protected 或 public 修饰此方法，子类可根据实际情况考虑是否覆写。
 *
 */
public abstract class LeaveRequest {

    public void request() {
        System.out.print("本人");
        System.out.print(name());
        System.out.print("因");
        System.out.print(reason());
        System.out.print("需请假");
        System.out.print(duration());
        System.out.print("天，望批准");
    }

    abstract String name();

    abstract String reason();

    abstract String duration();
}
